MySQL 使用WHERE IN从JSON数组中查询数据

您所在的位置:网站首页 mysql8 jsonb MySQL 使用WHERE IN从JSON数组中查询数据

MySQL 使用WHERE IN从JSON数组中查询数据

2024-03-12 00:40| 来源: 网络整理| 查看: 265

MySQL 使用WHERE IN从JSON数组中查询数据

在MySQL中,在执行查询操作时,我们通常使用WHERE子句来筛选数据。如果我们想要在多个值之间进行筛选,我们可以使用WHERE IN操作符。但是,如果我们的数据存储在JSON数组中,该如何使用WHERE IN来筛选数据呢?

在本文中,我们将讨论如何使用MySQL的JSON函数和WHERE IN来从JSON数组中查询数据。

阅读更多:MySQL 教程

1. 创建具有JSON数组列的表

首先,我们需要创建一个具有JSON数组列的表。在这里,我们将创建一个名为“users”的表,其中包含以下字段:

id – 用户ID name – 用户名 email – 邮件地址 phone – 电话号码 interests – 兴趣爱好(以JSON数组形式存储)

我们可以使用以下DDL语句来创建表:

CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255), phone VARCHAR(255), interests JSON );

接下来,我们可以使用INSERT语句来插入一些示例数据:

INSERT INTO users (name, email, phone, interests) VALUES ('Alice', '[email protected]', '123456', '["reading", "yoga"]'), ('Bob', '[email protected]', '654321', '["swimming", "running"]'), ('Charlie', '[email protected]', '111111', '["music", "movies"]');

现在,我们有了一个名为“users”的表,其中包含一个名为“interests”的JSON数组列。

2. 使用WHERE IN从JSON数组中查询数据

现在,我们已经在MySQL数据库中创建了一个具有JSON数组列的表。假设我们想查找所有兴趣包括“reading”或“movies”的用户。我们可以使用以下查询语句:

SELECT * FROM users WHERE JSON_CONTAINS(interests, '["reading"]') OR JSON_CONTAINS(interests, '["movies"]');

在这条查询语句中,我们使用了MySQL的JSON_CONTAINS函数来检查“interests”数组中是否包含给定的值。语法如下:

JSON_CONTAINS(json_doc, val[, path])

其中:

json_doc – 一个JSON文档(可以是JSON对象、JSON数组等)。 val – 要搜索的值。可以是Literal、JSON文档、或者字符串。如果是一个字符串,那么它将解析为一个JSON值。 path – 要搜索的路径。它可以使用$或者.来分隔路径。如果省略了路径,则搜索整个JSON文档。

在我们的查询语句中,我们使用JSON_CONTAINS函数来检查“interests”数组中是否包含值“reading”或“movies”。使用WHERE IN这种方式,我们可以轻松地从JSON数组中筛选数据。

3. 使用ANY_VALUE函数消除GROUP BY语句中的警告

上述查询语句中的代码是有效的,但是如果我们在SELECT语句中选择不包含“id”列的其他列,可能会得到以下错误:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'users.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

这是因为MySQL在GROUP BY语句中需要包括所有选择的列。为了消除这个错误,我们可以使用MySQL的ANY_VALUE函数来指定我们选择的列是任意值。例如:

SELECT ANY_VALUE(id), name, email, phone, interests FROM users WHERE JSON_CONTAINS(interests, '["reading"]') OR JSON_CONTAINS(interests, '["movies"]') GROUP BY name;

在上面的查询语句中,我们使用了ANY_VALUE函数来消除了错误。在实际使用中,如果我们不关心选择的列的值是哪个,我们可以使用ANY_VALUE函数来消除GROUP BY语句中的警告。

总结

在本文中,我们了深入了解了如何在MySQL中使用WHERE和JSON函数从JSON数组中查询数据。我们简要地了解了如何创建具有JSON数组列的表,然后使用MySQL的JSON_CONTAINS函数和WHERE子句从JSON数组中查询数据。此外,我们还了解了如何使用ANY_VALUE函数消除GROUP BY语句中的警告。

虽然使用JSON格式存储数据很方便,但它也会产生一些挑战,其中之一是如何从JSON数组中查询数据。在MySQL中,我们可以使用JSON函数和WHERE子句来轻松地筛选数据。希望这篇文章能对您有所帮助!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3